package zy.gongxiang.pucharse.converter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import zy.gongxiang.pucharse.dataobject.Udc;
import zy.gongxiang.pucharse.dto.UdcDTO;
import zy.gongxiang.pucharse.dto.UdcDetailDTO;
import zy.gongxiang.pucharse.enums.ResultEnum;
import zy.gongxiang.pucharse.exception.CommonException;
import zy.gongxiang.pucharse.repository.UdcRepository;

import java.util.*;
import java.util.stream.Collectors;

import static java.lang.System.in;

/**
 * @Auther: zhangy
 * @Date: 2018/9/18 15:13
 * @Description:
 */
@Slf4j
public class Udc2UdcDTOConverter {


    public static List<UdcDTO> convert(List<Udc> udcList){
        //定义UdcDTOlist对象
        List<UdcDTO> udcDTOList = new ArrayList<>();

        //判断对象是否为空
        if(udcList.isEmpty()){
            log.error("UDC查询为空");
            throw new CommonException(ResultEnum.UDC_NOT_EXIST);
        }

        udcDTOList = udcList.stream()
                .map(udc -> {
                    UdcDTO udcDTO = new UdcDTO();
                    udcDTO.setProductCode(udc.getProductCode());
                    udcDTO.setUserdefinedCode(udc.getUserdefinedCode());
                    udcDTO.setDescriptionOne(udc.getDescriptionOne());
                    return udcDTO;
                })
                .distinct()
                .map((udcDTO) -> {
//                                      udcDTO.setUdcDetailDTOList();
                    List<UdcDetailDTO> udcDetailDTOList = new ArrayList<>();
                    udcList.stream().filter(udc -> udc.getProductCode().equals(udcDTO.getProductCode()) && udc.getUserdefinedCode().equals(udcDTO.getUserdefinedCode()))
                            .map((udc) -> {
                                UdcDetailDTO udcDetailDTO = new UdcDetailDTO();
                                udcDetailDTO.setDetailcode(udc.getDetailCode());
                                udcDetailDTO.setDetailmessage(udc.getDetailMessage());
                                udcDetailDTO.setDetaildescription(udc.getDetailDescription());
                                return udcDetailDTOList.add(udcDetailDTO);
                            }).collect(Collectors.toList());

                    udcDTO.setUdcDetailDTOList(udcDetailDTOList);
                    return udcDTO;
                })
                .collect(Collectors.toList());



        return udcDTOList;





//        //采用lombda表达式处理Udc表头部分
//        //多个字段组合去重---示例
//        udcList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getProductCode()+f.getUserdefinedCode()))), ArrayList::new))
//                .forEach((udc) -> {
//                    UdcDTO udcDTO = new UdcDTO();
//                    udcDTO.setProductCode(udc.getProductCode());
//                    udcDTO.setUserdefinedCode(udc.getUserdefinedCode());
//                    udcDTO.setDescriptionOne(udc.getDescriptionOne());
//                    udcDTOList.add(udcDTO);
//                });
//
//        //将udc对象中的detail加入到udcDetailList中
//        //UdcDTO对象遍历内再遍历udclist，将符合条件的记录添加到UdcDTOList
//        udcDTOList.stream().forEach((udcDTO) -> {
//
//            List<UdcDetailDTO> udcDetailDTOList = new ArrayList<>();
//            //udcList遍历
//            udcList.stream().filter((udc) -> udcDTO.getProductCode().equals(udc.getProductCode()) && udcDTO.getUserdefinedCode().equals(udc.getUserdefinedCode())).collect(Collectors.toList()).forEach((udc) -> {
//                UdcDetailDTO udcDetailDTO = new UdcDetailDTO();
//                udcDetailDTO.setDetailcode(udc.getDetailCode());
//                udcDetailDTO.setDetailmessage(udc.getDetailMessage());
//                udcDetailDTO.setDetaildescription(udc.getDetailDescription());
//                udcDetailDTOList.add(udcDetailDTO);
//            });
//            udcDTO.setUdcDetailDTOList(udcDetailDTOList);
//        });


        }

}
